const fs = require('fs')
const FILE_PATH = './data.json'
/**
 * 查找所有的学生
 */

 function findAll(callback){
     fs.readFile(FILE_PATH,'utf8',(err,data)=>{
         if(err){
            return  callback(err)
         }
        callback(null,JSON.parse(data).students)
     })
 }
/**
 * 根据id查询具体的一个学生
 */
 function findStudentById(id,callback){
     fs.readFile(FILE_PATH,'utf8',(err,data)=>{
         if(err){
            return  callback(err)
         }

         data = JSON.parse(data)
        //  for(let i = 0;i<data.students.length;i++){
        //      if(data.students[i].id === id){
        //         //  如果没有异常，传一个null
        //          callback(null,data.students[i])
        //          break
        //      }
        //  }
        let student = data.students.find(item=>{
            return item.id === id
        })
        callback(null,student)
     })
 }


 /**
  * 添加一个学生
  */

  function addStudent(student,callback){
    // 1.读取文件
    fs.readFile(FILE_PATH,'utf8',(err,data)=>{
        if(err){
           return  callback(err)
        }
        // 把json字符串，转换成json对象
        data = JSON.parse(data)
        // 获取数据最后一个对象，并且把它的id+1 ，得到一个新的id
        let id = data.students[data.students.length - 1].id + 1
        // 把字符串类型学生，转换成对象类型学生
        let s = JSON.parse(student)
        // 动态的给学生添加一个id属性
        s.id = id
        // 把传递过来的学生对象，追加到数组末尾
        data.students.push(s)
        // 把新数组，重新写回到文件内
        fs.writeFile(FILE_PATH,JSON.stringify(data),(err)=>{
            if(err){
                return callback(err)
            }
            callback(null)
        })

    })
  }


  /**
   * 根据ID删除一个学生
   */
  function deleteStudentById(id,callback){
      fs.readFile(FILE_PATH,'utf8',(err,data)=>{
          if(err){
             return callback(err)
          }

          data = JSON.parse(data)
        //   for(let i = 0;i<data.students.length;i++){
        //       if(data.students[i].id === id){
        //           data.students.splice(i,1)
        //           break
        //       }
        //   }
        // 获取 指定对象在数组里面的下标
          let index = data.students.findIndex(item=>{
              return item.id === id
          })
        //  删除指定的对象
          data.students.splice(index,1)

        //   把删完之后的数据重写回文件内
        fs.writeFile(FILE_PATH,JSON.stringify(data),(err)=>{
            if(err){
                return callback(err)
            }
            callback(null)
        })
      })
  }
 
  /**
   * 更新学生信息
   */

function updateStudent(student,callback){
    fs.readFile(FILE_PATH,'utf8',(err,data)=>{
        if(err){
           return callback(err)
        }
        // 把传递过过来的字符串，转换成对象
        student = JSON.parse(student)
        data = JSON.parse(data)
      // 查找指定的对象
        let stu = data.students.find(item=>{
            return item.id === Number(student.id)
        })
    //   stu.hobbies=student.hobbies
    //   stu.classID = student.classID
    //   stu.
        for (const key in student) {
            stu[key] = student[key]
        }

      //   把删完之后的数据重写回文件内
      fs.writeFile(FILE_PATH,JSON.stringify(data),(err)=>{
          if(err){
              return callback(err)
          }
          callback(null)
      })
    })
}

 exports.findAll = findAll
 exports.findStudentById = findStudentById
 exports.addStudent = addStudent
 exports.deleteStudentById = deleteStudentById
 exports.updateStudent = updateStudent